/*
 * Copyright (c) 2024 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


import { Stmt } from "../ArkAnalyzer/src";

export class Edge {
    start: Stmt;
    end: Stmt;
    type: string = "";
    reason: string = "";

    constructor(start: Stmt, end: Stmt) {
        this.start = start;
        this.end = end;
    }

    public equals(edge: Edge): boolean{
        return this.start == edge.start && this.end == edge.end;
    }
}

export class CfgEdge extends Edge {
    type: string = 'cfg';

    constructor(start: Stmt, end: Stmt, reason?: string) {
        super(start, end);
        if (reason !== undefined) {
            this.reason = reason;
        }
    }
}

export class DfgEdge extends Edge {
    type: string = 'dfg';

    constructor(start: Stmt, end: Stmt) {
        super(start, end);
    }
}

export class CgEdge extends Edge{
    type: string = 'cg';
    
    constructor(start: Stmt, end:Stmt){
        super(start,end);
    }
}